package br.com.tabletcaixa.cliente;

import java.util.ArrayList;
import java.util.List;

import br.com.tabletcaixa.db.DBHelper;
import br.com.tabletcaixa.usuario.UsuarioVO;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;

public class ClienteDAO {

	private SQLiteDatabase db;
	private DBHelper dbHelper;

	private String[] colunas = { DBHelper.CLIENTE_ID, DBHelper.CLIENTE_NOME,
			DBHelper.CLIENTE_TELEFONE, DBHelper.CLIENTE_EMAIL };

	public ClienteDAO(Context context) {

		dbHelper = new DBHelper(context);

	}

	public void conectar() {

		db = dbHelper.getWritableDatabase();

	}

	public void desconectar() {

		dbHelper.close();

	}

	public long cadastrarCliente(Context context, ClienteVO cliente) {

		try {

			ContentValues values = new ContentValues();

			values.put(DBHelper.CLIENTE_NOME, cliente.getNome());
			values.put(DBHelper.CLIENTE_TELEFONE, cliente.getTelefone());
			values.put(DBHelper.CLIENTE_EMAIL, cliente.getEmail());

			return db.insert(DBHelper.TBL_CLIENTE, null, values);

		} catch (Exception e) {

			Toast.makeText(context,
					"Erro ao cadastrar cliente: /n" + e.getMessage(),
					Toast.LENGTH_LONG).show();

		}

		return 0;

	}

	public long excluirCliente(Context context, ClienteVO cliente) {

		try {

			long id = cliente.getId();
			
			ContentValues values = new ContentValues();
			values.put(DBHelper.CLIENTE_NOME, cliente.getNome());
			values.put(DBHelper.CLIENTE_TELEFONE, cliente.getTelefone());
			values.put(DBHelper.CLIENTE_EMAIL, cliente.getEmail());

			return db.delete(DBHelper.TBL_CLIENTE, DBHelper.CLIENTE_ID + " = " + id, null);

		} catch (Exception e) {

			Toast.makeText(context,
					"Erro ao cadastrar cliente: /n" + e.getMessage(),
					Toast.LENGTH_LONG).show();

		}

		return 0;

	}

	public long alterarCliente(Context context, ClienteVO cliente) {

		try {

			long id = cliente.getId();

			ContentValues values = new ContentValues();
			values.put(DBHelper.CLIENTE_NOME, cliente.getNome());
			values.put(DBHelper.CLIENTE_EMAIL, cliente.getEmail());
			values.put(DBHelper.CLIENTE_TELEFONE, cliente.getTelefone());

			return db.update(DBHelper.TBL_CLIENTE, values, DBHelper.CLIENTE_ID + " = " + id, null);

		} catch (Exception e) {

			Toast.makeText(context,
					"Erro ao alterar cliente: /n" + e.getMessage(),
					Toast.LENGTH_LONG).show();

		}

		return 0;

	}
	
	public void excluirTodosClientes() {

		db.execSQL("DELETE FROM " + DBHelper.TBL_CLIENTE);

	}

	public List<ClienteVO> consultar(String nome) {

		List<ClienteVO> lstClientes = new ArrayList<ClienteVO>();

		Cursor cursor = db.query(DBHelper.TBL_CLIENTE, colunas, 
				DBHelper.CLIENTE_NOME + " LIKE '%" + nome + "%'", null, null, null, null);

		cursor.moveToFirst();

		while (!cursor.isAfterLast()) {

			ClienteVO lCliente = cursorToCliente(cursor);
			lstClientes.add(lCliente);
			cursor.moveToNext();

		}

		cursor.close();

		return lstClientes;

	}

	/* Converter o Cursor de dados no objeto POJO Cliente */
	public ClienteVO cursorToCliente(Cursor cursor) {

		ClienteVO cliente = new ClienteVO();

		cliente.setId(cursor.getLong(0));
		cliente.setNome(cursor.getString(1));
		cliente.setTelefone(cursor.getString(2));
		cliente.setEmail(cursor.getString(3));

		return cliente;

	}

}
